#ifndef _VL_RTSP_SYNC_CODE__H_
#define _VL_RTSP_SYNC_CODE__H_

#include "defs.h"
#include <mutex>

namespace VLRTSP {

/**
 * @Author: CimZzz
 * @Date: 2022-01-13 11:22:40
 * 
 * 同步码
 */
class SyncCode {
public:
	/**
	 * @Author: CimZzz
	 * @Date: 2022-01-13 11:23:56
	 * 
	 * 构造函数
	 * @param min 最小值，默认为 0
	 * @param max 最大值，默认为 UINT32_MAX
	 */
	explicit SyncCode(uint32_t min = 0, uint32_t max = UINT32_MAX);
	
	/**
	 * @Author: CimZzz
	 * @Date: 2022-01-13 11:24:25
	 * 
	 * 析构函数
	 */
	~SyncCode();

	/**
	 * @Author: CimZzz
	 * @Date: 2022-01-13 11:25:24
	 * 
	 * 检查是否同步
	 * @param code 记录的同步码
	 * @return 如果记录的同步码与当前同步码相同，返回 ture
	 */
	bool checkSync(uint32_t code);

	/**
	 * @Author: CimZzz
	 * @Date: 2022-01-13 15:46:03
	 * 
	 * 获取当前同步码
	 * @return 返回当前同步码
	 */
	uint32_t getCode();

	/**
	 * @Author: CimZzz
	 * @Date: 2022-01-13 11:25:37
	 * 
	 * 变更同步码
	 * @return 返回变化后的同步码
	 */
	uint32_t nextCode();

private:
	/**
	 * @Author: CimZzz
	 * @Date: 2022-01-13 11:24:55
	 * 
	 * 线程锁
	 */
	std::mutex mutex;

	/**
	 * @Author: CimZzz
	 * @Date: 2022-01-13 11:25:05
	 * 
	 * 当前同步码
	 */
	uint32_t code;

	/**
	 * @Author: CimZzz
	 * @Date: 2022-01-14 15:54:05
	 * 
	 * 最大同步码
	 */
	uint32_t max;

	/**
	 * @Author: CimZzz
	 * @Date: 2022-01-14 14:36:00
	 * 
	 * 最小同步码
	 */
	uint32_t min;
};

}


#endif //_VL_RTSP_SYNC_CODE__H_
